package com.demo2do.filestorage.web.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.demo2do.core.entity.result.HttpResult;

/**
 * 
 * @author mohanlan
 *
 */
@Controller
@RequestMapping("/file-storages")
public class FileStorageController {
    
    private static final Logger logger = LoggerFactory.getLogger(FileStorageController.class);
    
    /**
     * 
     * @param channel
     * @return
     */
    @RequestMapping(value = "/create", method = RequestMethod.GET)
    public HttpResult prepare(@RequestParam("channel") String channel) {
        
        HttpResult httpResult = new HttpResult();
        
        logger.trace("#prepare");

        // channel == qiniu
        //      客户端上传前需要先从服务端获取上传凭证，并在上传资源时将上传凭证作为请求内容的一部分。不带凭证或带非法凭证的请求将返回 HTTP 错误码 401，代表认证失败。
        //      上传凭证生成算法详见：https://developer.qiniu.io/kodo/manual/upload-token
        //      return uptoken

        // channel == tencent
        //      前台需要调用微信JS SDK内的wx.uploadImage接口来上传文件到服务器。
        //      所以需要本系统需要请求中心服务器获取jsConfig并传给前台使用
        //      return jsconfig

        // channel == local
        //      本地配置文件服务器上传路径规则，并将相关参数传给业务系统。
        //      return 本地文件服务器上传令牌

        // returns token and related config

        return httpResult;
    
    }
    
    /**
     * 
     * @param token
     * @param media
     * @param channel
     * @return
     */
    @RequestMapping(value = "/{token}", method = RequestMethod.GET)
    public HttpResult get(@PathVariable("token") String token, 
                          @RequestParam("media") String media,
                          @RequestParam("channel") String channel) {
        
        HttpResult httpResult = new HttpResult();
        
        // channel == qiniu
        //      获取七牛配置文件直接本系统生成全路径
        //      return 七牛云空间外部地址 + 文件名称

        // channel == tencent
        //      本系统请求中心服务器素材管理的downloadResource接口，获取文件后保存到服务器七牛镜像地址, 等待七牛同步文件。
        //      return 七牛云空间外部地址 + 文件名称

        // channel == local
        //      本地配置文件服务器上传路径规则，并将相关参数传给业务系统。
        //      return 本地配置文件服务器外部访问路径 + 文件具体路径 + 文件名称

        // returns filestorage fullpath
        
        return httpResult;
    }
}
